package com.shujia.day03;

import java.util.Scanner;

public class Demo14DoubleDimensionArr {
    public static void main(String[] args) {
        /*
            TODO 二维数组
                格式1
                    数据类型[][] 变量名 = new 数据类型[m][n];
                格式2:
                    数据类型[][] 变量名 = new 数据类型[m][];
                格式3
                    数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};
                    数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};


                二维数组 赋值及取值 => 变量名[一维下标][二维下标]
         */
        String[][] allClassStu = new String[30][40];
        // 当直接使用变量名[] 可以取出一个维度中的数组
        String[] oneClassStu = allClassStu[1];
        oneClassStu[0] = "邢童";
        oneClassStu[1] = "徐强";

        System.out.println(oneClassStu[0]);
        System.out.println(oneClassStu[1]);
        System.out.println(allClassStu[1][0]);


        // 对于每个班级的学生人数不一样
        String[][] allClassStu2 = new String[30][];
        String[] oneClassStu2 = allClassStu2[29];
//        oneClassStu2[0] = "袁枫"; // java.lang.NullPointerException => 变量调用的内存地址为null 空
//        System.out.println(allClassStu2[29][0]);
        /*
            TODO  NullPointerException 问题
                由于 new String[30][]; 定义时,对于第二个维度没有定义长度=> 没有进行实例化
                allClassStu2 变量中 第一个维度中的数组 长度为 30 每个元素 为null
         */

        // TODO 重新创建一个字符串数组 其长度为 22 将其内存地址 赋予给 allClassStu2 变量的第29个下标的位置
        allClassStu2[29] = new String[22];
        allClassStu2[29][0] = "汪雨";
        System.out.println(allClassStu2[29][0]);


        int[][] allInt = {{1, 2, 4}, {2, 3, 4}, {2, 3, 4}};
        // 遍历二维数组中的所有数据
        for (int i = 0; i < allInt.length; i++) {
            for (int index = 0; index < allInt[i].length; index++) {
                System.out.println(allInt[i][index]);
            }
        }

        for (int i = 0; i < allInt.length; i++) {
            System.out.println(Demo13ArrayPrint.getArrStr(allInt[i]));
        }

        int[][] allSalary = {
                {22, 66, 44}
                , {77, 33, 88}
                , {25, 45, 65}
                , {11, 66, 99}
        };

        int sum = 0;
        for (int[] oneArr : allSalary) {
            for (int elem : oneArr) {
                sum += elem;
            }
        }
        System.out.println("sum:" + sum);

        /*
            1 0 0 0 0 0 0
            1 1
            1 2 1
            1 3 3 1
            1 4 6 4 1
            1 5 10 10 5 1
            分析：
            A:如果是n行，那么最后一行是n列。
            B:每一行的第一列和最后一列的元素是1。
            C:规律：
                每一行的第二列开始数据是：上一行的上一列+上一行的同一列
            D:把二维数组组成，然后遍历即可。
		遍历的时候，注意模仿九九乘法表的遍历。否则会有很多0。
         */
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你准备打印的是一个多少行的杨辉三角：");
        int n = sc.nextInt();

        int[][] allData = new int[n][n];
        allData[1][1] = 1;
        /*
            作业:自行思考

         */
        /*
            public static void main(String[] args)
            {
                int a = 10;
                int b = 20;
                System.out.println("a:"+a+",b:"+b);
                change(a,b);
                System.out.println("a:"+a+",b:"+b); //?

                int[] arr = {1,2,3,4,5};
                change(arr);
                System.out.println(arr[1]);
            }

		public static void change(int a,int b)
		{
			System.out.println("a:"+a+",b:"+b);
			a = b;
			b = a + b;
			System.out.println("a:"+a+",b:"+b);
		}

		public static void change(int[] arr)
		{
			for(int x=0; x<arr.length; x++)
			{
				if(arr[x]%2==0)
				{
					arr[x]*=2;
				}
			}
		}

         */



    }
}
